package io;

import java.io.*;
import java.util.Scanner;

public class IODemo7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 1. 先让用户指定一个要搜索的目录
        System.out.println("请输入要扫描的根目录");
        File rootDir = new File(scanner.next());
        if (!rootDir.isDirectory()) {
            System.out.println("输入有误，您输入目录不存在");
            return;
        }

        // 2. 用户输入查询的词
        System.out.println("请输入要查询的词：");
        String word = scanner.next();

        //3. 递归的进行目录/文件的遍历
        scanDir(rootDir, word);
    }

    private static void scanDir(File rootDir, String word) {
        // 列出当前的 rootDir中的内容，没有内容，直接递归结束
        File[] files = rootDir.listFiles();
        if (files == null) {
            return;
        }
        // 目录有内容，遍历目录中的每个元素
        for (File f : files) {
            if (f.isFile()) {
                // 是普通文件
                String content = readFile(f);
                if (content.contains(word)) {
                    System.out.println(f.getAbsoluteFile() + "包含要查找的关键字");
                }

            } else if (f.isDirectory()) {
                // 是目录
                scanDir(f,word);
            } else {
                // 不是普通文件，也不是目录文件，直接跳过
                continue;
            }
        }

    }

    private static String readFile(File f) {
        // 读取文件的整个内容，返回出来
        // 使用字符流来读取，由于咱们匹配的是字符串，此处只能按照字符流，才有意义
        StringBuilder builder = new StringBuilder();
        try (Reader reader = new FileReader(f)) {
            // 一次读一个字符,把读到的结果拼装到 StringBuilder中，统一转换成 String
            while (true) {
                int c = reader.read();
                if (c == -1) {
                    {
                        break;
                    }
                }
                builder.append((char)c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return builder.toString();
    }
}
